// 使用express框架构建web服务
// 1 引入express
const express = require("express");
const cookieParser = require("cookie-parser");
// 2. 创建app应用对象 
const app = express();

//在express中使用这个第三方cookie插件
app.use(cookieParser());

// 需要（中间件）使用编码处理post请求参数，才可以获取
app.use(express.urlencoded({ extended: true }))

// 配置模板引擎
app.set("view engine" , "ejs");
// 配置模板的存放目录
app.set("views","./views");

// 在此处创建一个中间件，所有的请求都会路过这里
app.use("/", (req, res, next) => {
    // 获取你的请求url地址
    //console.log(req.url);
    let url = req.url;
    const paths = ["/goods","/news"]; // 声明一个要过滤的url地址列表
    // 判断url地址是否在约束范围
    if(paths.includes(url)){
        // 判断是否登录（判读cookie中loginName是否有值）
        if(req.cookies.loginName == undefined){
            res.redirect("/login"); // 跳转登录页
            return;
        }
    }
    next();
});

// 3. 设置路由
//（get  /） 首页
app.get("/", (req, res) => {
    res.render("index",{cookies:req.cookies});
});
//（get  /goods） 商品展示
app.get("/goods", (req, res) => {
    res.render("goods",{cookies:req.cookies});
});
//（get  /news） 站内新闻
app.get("/news", (req, res) => {
    res.render("news",{cookies:req.cookies});
});
//（get  /login） 会员登录表单
app.get("/login", (req, res) => {
    res.render("login",{cookies:req.cookies});
});
//（post  /login） 执行会员登录
app.post("/login", (req, res) => {
    // 执行会员登录
    // 获取登录信息
    const data = req.body;
    // 判断账号和密码是否正确
    if(data.upass === "123"){
        //登录成功
        // 通过响应写入cookie的登录信息
        res.cookie("loginName",data.uname, {maxAge:1000*3600*24});
        // 跳转首页
        res.redirect("/");
    } else {
        // 登录失败
        res.render("login",{errinfo: "账号或密码错误！",cookies:req.cookies});
    }
});
//（get  /logout） 执行会员退出
app.get("/logout", (req, res) => {
    // 执行会员退出
    // 通过设置一个失效的cookie信息来实现客户端cookie的删除
    res.cookie("loginName","",{maxAge:-1});
    res.redirect("/login");
});

// 4. 设置监听端口，启动服务
app.listen(3000, ()=>{
    console.log("服务已启动，端口：3000");
})